package com.edu.exam.enums.common;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 操作类型枚举
 *
 * <p>定义通用的操作类型，用于各种系统中的操作分类和控制。
 * 这是系统的基础操作类型枚举，提供了通用的CRUD操作和其他常用操作类型。</p>
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-17
 */
public enum OperationType implements BaseEnum {

    /**
     * 创建操作
     */
    CREATE("CREATE", "创建"),

    /**
     * 读取操作
     */
    READ("READ", "读取"),

    /**
     * 更新操作
     */
    UPDATE("UPDATE", "更新"),

    /**
     * 删除操作
     */
    DELETE("DELETE", "删除"),

    /**
     * 查询操作
     */
    QUERY("QUERY", "查询"),

    /**
     * 搜索操作
     */
    SEARCH("SEARCH", "搜索"),

    /**
     * 插入操作
     */
    INSERT("INSERT", "插入"),

    /**
     * 修改操作
     */
    MODIFY("MODIFY", "修改"),

    /**
     * 复制操作
     */
    COPY("COPY", "复制"),

    /**
     * 移动操作
     */
    MOVE("MOVE", "移动"),

    /**
     * 重命名操作
     */
    RENAME("RENAME", "重命名"),

    /**
     * 导出操作
     */
    EXPORT("EXPORT", "导出"),

    /**
     * 导入操作
     */
    IMPORT("IMPORT", "导入"),

    /**
     * 验证操作
     */
    VALIDATE("VALIDATE", "验证"),

    /**
     * 审核操作
     */
    APPROVE("APPROVE", "审核"),

    /**
     * 拒绝操作
     */
    REJECT("REJECT", "拒绝"),

    /**
     * 提交操作
     */
    SUBMIT("SUBMIT", "提交"),

    /**
     * 撤销操作
     */
    UNDO("UNDO", "撤销"),

    /**
     * 重做操作
     */
    REDO("REDO", "重做"),

    /**
     * 激活操作
     */
    ACTIVATE("ACTIVATE", "激活"),

    /**
     * 停用操作
     */
    DEACTIVATE("DEACTIVATE", "停用"),

    /**
     * 启用操作
     */
    ENABLE("ENABLE", "启用"),

    /**
     * 禁用操作
     */
    DISABLE("DISABLE", "禁用"),

    /**
     * 锁定操作
     */
    LOCK("LOCK", "锁定"),

    /**
     * 解锁操作
     */
    UNLOCK("UNLOCK", "解锁"),

    /**
     * 启动操作
     */
    START("START", "启动"),

    /**
     * 停止操作
     */
    STOP("STOP", "停止"),

    /**
     * 暂停操作
     */
    PAUSE("PAUSE", "暂停"),

    /**
     * 恢复操作
     */
    RESUME("RESUME", "恢复"),

    /**
     * 重置操作
     */
    RESET("RESET", "重置"),

    /**
     * 清理操作
     */
    CLEANUP("CLEANUP", "清理"),

    /**
     * 备份操作
     */
    BACKUP("BACKUP", "备份"),

    /**
     * 恢复操作
     */
    RESTORE("RESTORE", "恢复"),

    /**
     * 同步操作
     */
    SYNC("SYNC", "同步"),

    /**
     * 异步操作
     */
    ASYNC("ASYNC", "异步"),

    /**
     * 批量操作
     */
    BATCH("BATCH", "批量操作"),

    /**
     * 单个操作
     */
    SINGLE("SINGLE", "单个操作"),

    /**
     * 打印操作
     */
    PRINT("PRINT", "打印"),

    /**
     * 下载操作
     */
    DOWNLOAD("DOWNLOAD", "下载"),

    /**
     * 上传操作
     */
    UPLOAD("UPLOAD", "上传"),

    /**
     * 登录操作
     */
    LOGIN("LOGIN", "登录"),

    /**
     * 登出操作
     */
    LOGOUT("LOGOUT", "登出"),

    /**
     * 权限操作
     */
    PERMISSION("PERMISSION", "权限"),

    /**
     * 配置操作
     */
    CONFIG("CONFIG", "配置"),

    /**
     * 监控操作
     */
    MONITOR("MONITOR", "监控"),

    /**
     * 日志操作
     */
    LOG("LOG", "日志"),

    /**
     * 统计操作
     */
    STATISTICS("STATISTICS", "统计"),

    /**
     * 分析操作
     */
    ANALYZE("ANALYZE", "分析"),

    /**
     * 报告操作
     */
    REPORT("REPORT", "报告"),

    /**
     * 通知操作
     */
    NOTIFY("NOTIFY", "通知"),

    /**
     * 消息操作
     */
    MESSAGE("MESSAGE", "消息"),

    /**
     * 通信操作
     */
    COMMUNICATION("COMMUNICATION", "通信");

    private final String code;
    private final String description;

    OperationType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取对应的枚举
     *
     * @param code 编码
     * @return 对应的枚举
     */
    public static OperationType fromCode(String code) {
        for (OperationType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Unknown operation type code: " + code);
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}
